Nginx 为网站加上https
众所周知,http协议是一种不安全的协议,采用wireshark可以轻易抓包获取并修改http报文的内容,chrome中更是把没有经过正规https证书的网站都给标记成为不安全的网站,而https抓包也看不出里面是个什么内容,一旦被修改了就会被发现,因此给网站加上https就显得尤为重要
具体步骤很简单,申请ssl证书
-> 部署到nginx中
->配置强制跳转(可选)
->再cloudflare中应用(可选)
为域名申请证书
https是采用ssl证书来进行验证的,https和ssl协同进行加密通信的具体原理网上一抓一大把。不求甚解的同学只需要知道ssl证书就相当于加密的钥匙就可以了,这里仅简述一下如何操作
let’s encrypt是个免费的证书申请机构,申请ssl证书的本质是验证是你对这个域名的所有权
首先运行sudo apt-get install certbot
安装证书机器人,这个机器人还会自动给证书续期,非常的人性化。
然后运行sudo certbot --manual --preferred-challenges dns certonly
选择同意记录本机IP之后弹出如下提示
1 | ------------------------------------------------------------------------------- |
然后程序会暂停,接着就打开你的域名的DNS管理界面,为你的域名_acme-challenge.yourdomain.xxxx
添加一个TXT记录,内容就是上面的密钥。
然后等一会儿再随便一台机子上(似乎linux才有这个命令,我Windows 10 无这个dig命令)使用dig -t txt _acme-challenge.yourdomain.xxxx
查看是否获取到了相应的token
然后回到你的服务器上面,回车继续,然后成功了之后,你的证书就会保存在/etc/letsencrypt/live/yourdomain.xxxx/
下面,里面的cert.pem
文件是证书文件,privkey.pem
文件是私钥文件,一般我们只会用到这两个文件
但是这个是一个链接,类似于windows里面的快捷方式,如果不做证书迁移的话直接用就行了,如果要迁移证书的话这个文件是保存在/etc/letsencrypt/archive/yourdomain.xxxx/
下面的,而且名字也有些许不同
部署到nginx
其实也很简单,只需要按照下方的配置文件进行配置
1 | server{ |
保存在/etc/nginx/conf.d
下面,文件名xxxx.conf
即可,然后重启nginx
1 | nginx -t //用于检查是否有语法错误 |
然后通过https://abc.yourdomain.xxxx
这种方式来访问你的网站就可以啦
强制跳转https
由于默认我们浏览器访问的是80端口,这不是https的默认端口,每次在地址栏里面输入https://
又太麻烦,因此我们可以搞一个强制转换,把http://abc.yourdomain.xxx
强制转换成https://abc.yourdomain.xxx
这种方式。我们只需要在nginx里面添加这样一个配置文件即可
1 |
|
然后nginx -t
-> nginx -s reload
重启nginx即可
在cloudflare里面配置
给你的网站套一个cdn是一个不错的选择,然而默认的ssl设置是你到cdn是走https,cdn到网站走的是http,如果要全程https的话就得在cloudflare里面设置,cloudflare里面也很简单,只需要把小云朵点开,然后ssl设置里面把mode改为full(strict)
即可,官方文档
如果你的网站出现重定向次数过多
的问题,多半是你开启了强制跳转却没有在cdn里面配置端到端的https的问题。
这样一来,给网站升级到https就大功告成了